ThinkPHP5.1+Swoole4.2.8+Websocket 长连接 - 开发文档
1、渠道商管理
通过/admin.php
进入后台,账号密码admin
在渠道管理模块中设置,密钥功能暂未使用,只针对appid
做了鉴权限制。
2、客户端websocket打开方式
本DEMO暂不支持WSS
的连接方式
打开websocket时,需要带上appid
参数,进行鉴权,格式为:ws://IP:端口?appid=APPID
3、客户端websocket请求格式
客户端websocket发包,数据使用json
格式,其中有几个必填参数为:
{ 'appid':APPID, 'user_id':用户身份凭证,每个用户是固定的,例如为用户ID,手机号,编号都可以, 'code':请求状态码,其中有几个状态码是系统固定的,其余未占用的可以自行定义 }
4、客户端websocket已被使用的状态码
code : 1 上线 code : 2 心跳重连 code : 3 下线 code : 4 消息广播 code : 5 强制下线 code : 6 心跳检测
注意:当收到code = 2
时,客户端无需进行任何操作。
注意:当收到code = 6
时,客户端需要向server
发送一个code = 2
的空请求,进行心跳检测。
1、启动方式
使用方法:
①:CD进您的/swoole/
目录
②:如果您是调试阶段,可以直接php server.php
,激活程序,这样的话在运行过程中出错,能在cmd界面查看报错内容
③:如果您是部署阶段,可以使用nohup server.php >>/dev/null 2>&1 &
命令,后台守护进程运行。
1、发包方式
直接使用http
的方式,对格式为:http://IP:端口?appid=APPID
的地址发起请求,请求类型为POST
2、请求格式
原理很简单,就是在client
端通过curl
的方式模拟websocket
客户端向server
端发送数据包,所以其数据格式与websocket
客户端发包格式一致。
其主要参数由以下几个组成:
{ 'appid':APPID, 'user_id':用户身份凭证,每个用户是固定的,例如为用户ID,手机号,编号都可以(如果是群发,这块填null), 'code':请求状态码,其中有几个状态码是系统固定的,其余未占用的可以自行定义 'limit': 当code为8时必填,为拉取在线用户记录数, 'page': 当code为8时必填,为拉取在线用户当前页数, }
3、client端已被使用的状态码
该系统状态码与websocket
系统占用状态码是共用的,只是分开说明比较好理解。
code : 7 查询渠道信息 code : 8 查询渠道下的用户列表
4、返回数据格式
{ code:状态码 msg:说明 data:返回数据 }
5、返回的状态码
code : 500 错误 code : 200 成功
SDK与DEMO下载
WebSocket客户端:/swoole/demo/index.php
,启动server.php
后直接访问即可,是个简单的聊天室demo
Server端:/swoole/server.php
,按文档启用方式
Client端:/swoole/client-sdk/go.php
,打开文件阅读代码
注解
A.有的人可能会疑惑,你这个是面向聊天室类的WebSocket,那要怎么改成客户端只面向Client通信,不需要群广播消息呢?
其实很简单,我们只需要修改下/swoole/server.php
中的消息接收模块(onMessage
事件)就行,熟悉swoole的朋友改起来很简单。
B.有的人又很疑惑了,我看你的websocket端的请求数据格式只有3个字段,那如果我想自定义多几个字段,例如content
,user_name
之类的可不可以呢?
其实是可以的,那3个字段只是系统的固定字段,如果你需要添加其他的字段则直接添加即可,系统会完整的推送广播出去。